如何在Enum.map中调用匿名函数 您所在的位置:网站首页 elixir 语法 如何在Enum.map中调用匿名函数

如何在Enum.map中调用匿名函数

2023-03-11 22:18| 来源: 网络整理| 查看: 265

fib = fn a,b,0 -> a a,b,n -> fib.(b, a+b, n-1) end IO.puts Enum.sum(Enum.filter(Enum.map(1..50, fn n -> fib.(0,1,n) end), even and fn(x) -> x

但是,当我运行此代码时,我得到:

undefined function fib/0 (elixir) src/elixir_fn.erl:33: anonymous fn/3 in :elixir_fn.expand/3 (stdlib) lists.erl:1238: :lists.map/2 (stdlib) lists.erl:1238: :lists.map/2 (elixir) src/elixir_fn.erl:36: :elixir_fn.expand/3

我该如何解决?

1> Dogbert..:

Elixir目前不允许定义匿名递归函数.你有两个选择:def在任何模块内部使用定义一个普通函数,或者使用下面的技巧(hack?)来制作一些匿名递归函数:

fib = fn fib, a, b, 0 -> a fib, a, b, n -> fib.(fib, b, a+b, n-1) end IO.puts Enum.sum(Enum.filter(Enum.map(1..50, fn n -> fib.(fib, 0, 1, n) end), fn(x) -> rem(x, 2) == 0 && x

我建议在模块中定义此函数,而不是使用此hack:

defmodule Fib do def fib(a, _b, 0), do: a def fib(a, b, n), do: fib(b, a + b, n - 1) end IO.puts Enum.sum(Enum.filter(Enum.map(1..50, fn n -> Fib.fib(0, 1, n) end), fn(x) -> rem(x, 2) == 0 && x

注意:在Enum.filter/2我修复的第二个参数中也存在语法错误(希望正确).

提示:请阅读管道运算符以使IO.puts代码更具惯用性:http://elixir-lang.org/getting-started/enumerables-and-streams.html#the-pipe-operator



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有